import { LLMNode } from "./llmNode";

interface ISchedulerTask {
    key: string;
    description: string;
}

export class SchedulerNode extends LLMNode {
    tasks: ISchedulerTask[];
    disableMessage: boolean = true;

    private addTaskToSystemPrompt() {
        if (this.tasks.length <= 1) {
            throw new Error("任务数量必须大于1");
        }
        this.systemPrompt = `
            ## role
            你是一个任务调度器

            ## 任务定义
            ${this.tasks.map(x => `${x.key}: ${x.description}`).join("\n")}

            ## workflow
            1. 阅读并总结历史消息信息
            2. 深入理解用户输入信息
            3. 根据历史信息和用户输入信息，判断应该执行哪个任务并输出任务定义

            ## 输出
            仅仅输出任务定义中的某个任务，如：${this.tasks[0].key}
            不要输出任何多余的信息
        `;

        this.userMessages = [
            `##用户输入: "${this.inputVars.State.userInput}"`
        ];
    }

    async Run() {
        this.addTaskToSystemPrompt();
        return await super.Run();
    }
}